﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using DSDCiZharp.Models.Itinerarios;

namespace DSDCiZharp.Controllers
{
    public class ItinerarioController : Controller
    {
        public ActionResult RegistrarItinerario()
        {
            var model = new ItinerariosModel();
            
            model.ListarOrigenes();
            model.ListarDestinos();

            return View(model);
        }

        public ActionResult ModificarItinerario(string Id_Itinerario)
        {
            var model = new ItinerariosModel();

            model.ListarOrigenes();
            model.ListarDestinos();

            model.obtenerItinerario(Id_Itinerario);

            return View(model);
        }

        public ActionResult EliminarItinerario(string Id_Itinerario)
        {
            var model = new ItinerariosModel();

            model.eliminarItinerario(Id_Itinerario);
            model.ListarItinerarios();

            return View("ItinerarioViajes", model.lstItinerario);
        }

        public ActionResult ItinerarioViajes()
        {
            var model = new ItinerariosModel();

            model.ListarItinerarios();

            return View(model.lstItinerario);
        }

        [HttpPost]
        public ActionResult GrabarNuevoItinerario(string CiudadOrigenSeleccionada, 
                                                  string CiudadDestinoSeleccionada,
                                                  string FechaSalida,
                                                  string HoraSalida,
                                                  string FechaLlegada,
                                                  string HoraLlegada,
                                                  string cantidadAsientos)
        {
            int cntAsientos = 0;
            DateTime fSalida = new DateTime();
            DateTime fLlegada = new DateTime();

            if (int.Parse(CiudadOrigenSeleccionada) == 0)
                ViewData["Error"] = "Debe seleccionar la Ciudad de Origen";
            else if (int.Parse(CiudadDestinoSeleccionada) == 0)
                ViewData["Error"] = "Debe seleccionar la Ciudad de Destino";
            else if (FechaSalida.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la fecha de salida";
            else if (HoraSalida.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la hora de salida";
            else if (FechaLlegada.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la fecha de llegada";
            else if (HoraLlegada.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la hora de llegada";
            else if (cantidadAsientos.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la cantida de Asientos";
            else
            {
                try 
                {
                    cntAsientos = int.Parse(cantidadAsientos);
                    if (cntAsientos == 0)
                        ViewData["Error"] = "Debe ingresar la cantidad de asientos";
                }
                catch
                {
                    ViewData["Error"] = "Ingresar la cantidad de asientos correctamente";
                }

                if (ViewData["Error"] == null)
                {
                    try
                    {
                        fSalida = DateTime.Parse(FechaSalida + " " + HoraSalida);
                        try
                        {
                            fLlegada = DateTime.Parse(FechaLlegada + " " + HoraLlegada);
                        }
                        catch
                        {
                            ViewData["Error"] = "El formato de Fecha y Hora de Llegada no es correcto";
                        }
                    }
                    catch 
                    {
                        ViewData["Error"] = "El formato de Fecha y Hora de la Salida no es correcto";  
                    }
                }
            }

            var model = new ItinerariosModel();

            model.ListarOrigenes();
            model.ListarDestinos();

            if (ViewData["Error"] == null)
            {
                Itinerario itinerario = new Itinerario();
                itinerario.Id_Itinerario = 0;
                itinerario.Id_Origen = int.Parse(CiudadOrigenSeleccionada);
                itinerario.Descripcion_Origen = "";
                itinerario.Id_Destino = int.Parse(CiudadDestinoSeleccionada);
                itinerario.Descripcion_Destino = "";
                itinerario.Salida = fSalida.ToShortDateString() + " " + fSalida.ToShortTimeString();
                itinerario.Llegada = fLlegada.ToShortDateString() + " " + fLlegada.ToShortTimeString();
                itinerario.Total_Asiento = cntAsientos;
                itinerario.Estado = "A";

                string resultado = model.nuevoItinerario(itinerario);
                if (resultado.Equals(""))
                {
                    model.ListarItinerarios();
                    return View("ItinerarioViajes", model.lstItinerario);
                }
                else
                {
                    ViewData["Error"] = resultado;

                    model.CiudadOrigenSeleccionada = CiudadOrigenSeleccionada;
                    model.CiudadDestinoSeleccionada = CiudadDestinoSeleccionada;
                    model.FechaSalida = FechaSalida;
                    model.HoraSalida = HoraSalida;
                    model.FechaLlegada = FechaLlegada;
                    model.HoraLlegada = HoraLlegada;
                    model.cantidadAsientos = cantidadAsientos;

                    return View("RegistrarItinerario", model);
                }
            }
            else
            {
                model.CiudadOrigenSeleccionada = CiudadOrigenSeleccionada;
                model.CiudadDestinoSeleccionada = CiudadDestinoSeleccionada;
                model.FechaSalida = FechaSalida;
                model.HoraSalida = HoraSalida;
                model.FechaLlegada = FechaLlegada;
                model.HoraLlegada = HoraLlegada;
                model.cantidadAsientos = cantidadAsientos;

                return View("RegistrarItinerario", model);
            }
        }

        [HttpPost]
        public ActionResult GrabarModificacionItinerario(string Id_Itinerario,
                                                         string CiudadOrigenSeleccionada,
                                                         string CiudadDestinoSeleccionada,
                                                         string FechaSalida,
                                                         string HoraSalida,
                                                         string FechaLlegada,
                                                         string HoraLlegada,
                                                         string cantidadAsientos)
        {
            int cntAsientos = 0;
            DateTime fSalida = new DateTime();
            DateTime fLlegada = new DateTime();

            if (int.Parse(CiudadOrigenSeleccionada) == 0)
                ViewData["Error"] = "Debe seleccionar la Ciudad de Origen";
            else if (int.Parse(CiudadDestinoSeleccionada) == 0)
                ViewData["Error"] = "Debe seleccionar la Ciudad de Destino";
            else if (FechaSalida.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la fecha de salida";
            else if (HoraSalida.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la hora de salida";
            else if (FechaLlegada.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la fecha de llegada";
            else if (HoraLlegada.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la hora de llegada";
            else if (cantidadAsientos.Trim().Equals(""))
                ViewData["Error"] = "Debe ingresar la cantida de Asientos";
            else
            {
                try
                {
                    cntAsientos = int.Parse(cantidadAsientos);
                    if (cntAsientos == 0)
                        ViewData["Error"] = "Debe ingresar la cantidad de asientos";
                }
                catch
                {
                    ViewData["Error"] = "Ingresar la cantidad de asientos correctamente";
                }

                if (ViewData["Error"] == null)
                {
                    try
                    {
                        fSalida = DateTime.Parse(FechaSalida + " " + HoraSalida);
                        try
                        {
                            fLlegada = DateTime.Parse(FechaLlegada + " " + HoraLlegada);
                        }
                        catch
                        {
                            ViewData["Error"] = "El formato de Fecha y Hora de Llegada no es correcto";
                        }
                    }
                    catch
                    {
                        ViewData["Error"] = "El formato de Fecha y Hora de la Salida no es correcto";
                    }
                }
            }

            var model = new ItinerariosModel();

            model.ListarOrigenes();
            model.ListarDestinos();

            if (ViewData["Error"] == null)
            {
                Itinerario itinerario = new Itinerario();
                itinerario.Id_Itinerario = int.Parse(Id_Itinerario);
                itinerario.Id_Origen = int.Parse(CiudadOrigenSeleccionada);
                itinerario.Descripcion_Origen = "";
                itinerario.Id_Destino = int.Parse(CiudadDestinoSeleccionada);
                itinerario.Descripcion_Destino = "";
                itinerario.Salida = fSalida.ToShortDateString() + " " + fSalida.ToShortTimeString();
                itinerario.Llegada = fLlegada.ToShortDateString() + " " + fLlegada.ToShortTimeString();
                itinerario.Total_Asiento = cntAsientos;
                itinerario.Estado = "A";

                string resultado = model.actualizarItinerario(itinerario);
                if (resultado.Equals(""))
                {
                    model.ListarItinerarios();
                    return View("ItinerarioViajes", model.lstItinerario);
                }
                else
                {
                    ViewData["Error"] = resultado;

                    model.Id_Itinerario = Id_Itinerario;
                    model.CiudadOrigenSeleccionada = CiudadOrigenSeleccionada;
                    model.CiudadDestinoSeleccionada = CiudadDestinoSeleccionada;
                    model.FechaSalida = FechaSalida;
                    model.HoraSalida = HoraSalida;
                    model.FechaLlegada = FechaLlegada;
                    model.HoraLlegada = HoraLlegada;
                    model.cantidadAsientos = cantidadAsientos;

                    return View("ModificarItinerario", model);
                }
            }
            else
            {
                model.Id_Itinerario = Id_Itinerario;
                model.CiudadOrigenSeleccionada = CiudadOrigenSeleccionada;
                model.CiudadDestinoSeleccionada = CiudadDestinoSeleccionada;
                model.FechaSalida = FechaSalida;
                model.HoraSalida = HoraSalida;
                model.FechaLlegada = FechaLlegada;
                model.HoraLlegada = HoraLlegada;
                model.cantidadAsientos = cantidadAsientos;

                return View("ModificarItinerario", model);
            }
        }
    }
}
